package processor

import (
	"fmt"
	"h1/tcpdemo/common/message"
	"h1/tcpdemo/common/utils"
	"io"
	"net"
)

type Processor struct {
	Conn net.Conn
}

// 循环读取客户端发送的信息
func (this *Processor) Process2() (err error) {

	fmt.Println("获得一个连接")
	for {
		//循环读取客户端发送的信息
		//这里我们将读取数据包，直接封装成一个函数readPkg(), 返回Message, Err

		//创建一个Transfer 实例完成读包任务
		tf := &utils.Transfer{
			Conn: this.Conn,
		}
		mes, err := tf.ReadPkg()
		if err != nil {
			if err == io.EOF {
				fmt.Println("客户端退出，服务器端也退出..")
				return err
			} else {
				fmt.Println("readPkg err=", err)
				return err
			}
		}

		err = this.serverProcessMes(&mes)
		if err != nil {
			return err
		}
	}

}

func (this *Processor) serverProcessMes(mes *message.Message) (err error) {
	// 功能：根据客户端发送消息种类不同，决定调用哪个函数来处理
	//看看是否能接收到客户端发送的群发的消息
	fmt.Println("mes=", mes)

	switch mes.Type {
	case message.LoginMesType:
		err = this.login(mes, err)
	case message.RegisterMesType:
		err = this.register(mes)
	case message.SmsMesType:
		this.sendAll(mes)
	default:
		fmt.Println("消息类型不存在，无法处理...")
	}
	return
}

func (this *Processor) sendAll(mes *message.Message) {
	//创建一个SmsProcess实例完成转发群聊消息.
	smsProcess := &SmsProcess{}
	smsProcess.SendGroupMesS(mes)
}

func (this *Processor) login(mes *message.Message, err error) error {
	//处理登录登录
	//创建一个UserProcess实例
	up := &UserProcess{
		Conn: this.Conn,
	}
	return up.ServerProcessLogin(mes)
}

func (this *Processor) register(mes *message.Message) error {
	//处理注册
	up := &UserProcess{
		Conn: this.Conn,
	}
	return up.ServerProcessRegister(mes) // type : data
}
